<?php

namespace App\Exceptions;

/**
 * json正常响应异常
 *
 * 使用`throw new \App\Exceptions\JsonResponseException`替代返回多个`return`，解决代码复杂度问题
 */
class JsonResponseException extends ExitException
{
    /**
     * 返回一个结果数组
     *
     * @param int    $code    错误码
     * @param string $message 提示信息
     * @param mixed  $data    数据
     * @param mixed  $info    非生产环境下的数据
     */
    public function __construct(int $code, string $message, $data = null, $info = null)
    {
        if (empty($message)) {
            $codeData = config('code._' . $code, ['code' => 0, 'msg' => 'error']);
            if ($codeData['code']) {
                $message = $codeData['msg'];
            }
        }

        $this->data = $this->makeContent($code, $message, $data, $info);
        parent::__construct($code, $message);
    }

    /**
     * 组装要返回的数据
     *
     * @param int    $code    错误码
     * @param string $message 提示信息
     * @param mixed  $data    数据
     * @param mixed  $info    非生产环境下的数据
     *
     * @return array
     */
    private function makeContent(int $code, string $message, $data = null, $info = null)
    {
        $content = [
            'code' => $code,
            'msg'  => $message,
            'data' => $data
        ];

        if (!app()->environment('production')) {
            // 正式环境下不返回本地数据
            $content['info'] = $info;
        }

        return $content;
    }
}
